package version1;

import lombok.*;

@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class Student {

    private String name;
    private int age;

    /**
     * 重写hashCode方法，建立Student对象的hash值算法内容。 通过学生对象特有数据姓名和年龄值来算出hash值。
     */
    @Override
    public int hashCode() {
        final int NUMBER = 31;
        return this.getName().hashCode() + this.getAge() * NUMBER;
    }
    
    /**
     * 重写Student对象的equals方法，同姓名同年龄就认为是同一个人
     * 
     * @param obj 要比较的对象
     * @return 是否相等
     */
    @Override
    public boolean equals(Object obj) {
        //System.out.println("equals");
        if(this == obj){
            return true;
        }
        if(!(obj instanceof Student)){
            throw new ClassCastException(obj+"类型不正确");
        }

        Student student = (Student)obj;
        // 同姓名同年龄就认为是同一个人
        return this.getName().equals(student.getName()) && this.getAge() == student.getAge();
    }
    
}
